package com.kevinkk.array;

/**
 * 搜索插入位置
 * 给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。
 *
 * 二分查找的两个要求：
 *  1. 数组是有序的
 *  2. 元素是唯一的
 * 这道题其实就是要求的是第一个大于等于目标值的位置
 * 如果二分查找直接查到这个元素，那么直接返回该下标即可
 * 如果没有，也就是while循环退出，那此时left指针肯定是在right指针右边，那表示第一个大于目标值的位置的肯定就是 left 指针
 */

public class SearchInsertPosition {
    public int searchInsert(int[] nums, int target) {
        int left = 0, right = nums.length - 1;
        int mid = -1;
        while (left <= right) {
            mid = (left + right) / 2;
            if(nums[mid] == target){
                return mid;
            }else if(nums[mid] < target){
                left = mid + 1;
            }else{
                right = mid - 1;
            }
        }

        return left;
    }
}
